<?php

require_once "OperacoesBD.php";
require_once "ConectaDB.php";

/**
 * Classe responsável por tratar toda as alterações referentes a tabela Usuário no banco de dados,
 * ela implementa a interface OperacoesBD, afim de garantir que os métodos básicos de inserção, 
 * consulta, edição e exclusão de dados sejam implementados na aplicação.
 * 
 * @author gabrielbmoro
 */
class DBUsuario implements OperacoesBD {

    private $conection;
    private $bdConection;
    private $tableAluno;
    private $tableProfessor;
    private $tableMembroExterno;

    /* O método construtor inicializará os dados: recuperando a conecção com o banco de dados, 
      inicializando o nome da tabela e recuperando o objeto mediador com a base de dados */

    public function __construct() {
        $this->conection = ConectaDB::singleton();
        $this->bdConection = $this->conection->getBCConection();
        $this->tableAluno = "`Aluno`";
        $this->tableProfessor = "`Professor`";
        $this->tableMembroExterno= "`MembroExterno`";
    }

    /* Método responsável por verificar se o registro refere-se a um professor ou aluno, ele compara
      o login e retorna uma array com o id e o tipo correspondente ao login do parâmetro. */

    private function verificaAlunoOuProfessor($login) {

        if (isset($this->conection)) {
            $resultSet = $this->bdConection->query("SELECT `idAluno` FROM " .
                    $this->tableAluno . " WHERE `matricula_login`= " .
                    $login . " or `email`= " . $login . ";");

            $vetorMensagens = null;

            $contador = 0;
            $idAluno = 0;

            while ($row = $resultSet->fetch_object()) {
                $vetorMensagens[$contador] = $row->idAluno;
                if ($vetorMensagens[$contador] == null) {
                    $contador++;
                    continue;
                } else {
                    $idAluno = $vetorMensagens[$contador];
                    $msg = array(0 => $idAluno, 1 => "Aluno");
                    return $msg;
                }
            }

            $resultSet = $this->bdConection->query("SELECT `idProfessor` FROM " .
                    $this->tableProfessor . " WHERE `siape_login`= " . $login . ";");

            $vetorMensagens1 = null;

            $contador1 = 0;
            $idProfessor1 = 0;
            while ($row = $resultSet->fetch_object()) {
                $vetorMensagens1[$contador1] = $row->idProfessor;
                if ($vetorMensagens1[$contador1] == null) {
                    $contador++;
                    continue;
                } else {
                    $idProfessor1 = $vetorMensagens1[$contador1];
                    $msg = array(0 => $idProfessor1, 1 => "Professor");
                    return $msg;
                }
            }
            $resultSet = $this->bdConection->query("SELECT `id_MembroExterno` FROM " .
                    $this->tableMembroExterno . " WHERE `cpf_MembroExterno`= " . $login . ";");

            $vetorMensagens2 = null;

            $contador2 = 0;
            $idMembroExterno = 0;
            while ($row = $resultSet->fetch_object()) {
                $vetorMensagens2[$contador2] = $row->id_MembroExterno;
                if ($vetorMensagens2[$contador2] == null) {
                    $contador2++;
                    continue;
                } else {
                    $idMembroExterno = $vetorMensagens2[$contador2];
                    $msg = array(0 => $idMembroExterno, 1 => "MembroExterno");
                    return $msg;
                }
            }
        } else {
            return null;
        }
    }

    /* Método responsável por recuperar dados da tabela. */

    public function recuperar($campoCondicional) {
        $login = $campoCondicional['login']; //login
        $senha = $campoCondicional['senha']; //senha

        $arrayValores = $this->verificaAlunoOuProfessor($login);
        if ($arrayValores != null) {
            $idUsr = $arrayValores[0];
            $table = $arrayValores[1];

            if (isset($this->conection)) {
                $campo = null;
                if ($table == "Professor") {
                    $campo = "`idProfessor`";
                    echo "Professor Identificado";
                } else if ($table == "Aluno") {
                    $campo = "`idAluno`";
                    echo "Aluno Identificado";
                } else if($table= "MembroExterno"){
                    $campo= "`id_MembroExterno`";
                    echo "MembroExterno Identificado";
                }
                
                $resultSet = $this->bdConection->query("SELECT `senha` FROM " .
                        "`" . $table . "`" . " WHERE " . $campo . "= " . $idUsr . ";");

                while ($row = $resultSet->fetch_object()) {
                    if ($senha == $row->senha) {
                        $msg = array(0 => 0, 1 => $table, 2=> $idUsr);
                        return $msg;
                    } else {
                        continue;
                    }
                }
                return null;
            }
        }
    }

    public function deletar($dado) {
        
    }

    public function editar($campo, $dado) {
        
    }

    public function inserir($dado) {
        
    }

}
